package ajaxjs.config;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

import ajaxjs.Constant;
import ajaxjs.Util;
import ajaxjs.lang.delegate;
import ajaxjs.lang.servletHandler;

public class Page {
	public HttpServletRequest request = null;
	@servletHandler
	public Page(HttpServletRequest request){
		this.request = request;
		request.setAttribute("pageInfo", this);
	}
	
	/**
	 * 是否为移动客户端，响应式输出
	 * @return
	 */
	@delegate
	public boolean isPhone(){
		ajaxjs.net.UA ua = new ajaxjs.net.UA(request);
		return ua.isPhone();
	}
	
	/**
	 * 为兼容旧版 ie
	 * @return
	 */
	@delegate
	public boolean isOldIE(){
		// 是否为移动客户端，响应式输出
		ajaxjs.net.UA ua = new ajaxjs.net.UA(request);
		return ua.isIE() && ua.is_old_IE();
	}
	
	/**
	 * 用于局域网内的测试机器
	 * @cache
	 */
	private static String localIp = null;
	private static String getLocalIp(){
		if(localIp == null){
			localIp = ajaxjs.net.Ip.getReal_LAN_IP();
			if(localIp == null)localIp = "localhost";// 还是 null，那就本机的……没开网卡？
		}
		return localIp;
	}
	
	/**
	 * 获取 CSS 地址
	 * @param lessPath
	 * @return
	 */
	public String getCssUrl(String lessPath){
		if(Application.isDebug){
			Map<String, String> params = new HashMap<String, String>();
			params.put("isdebug", "true");
			params.put("lessFile", Mappath(lessPath, request));
			params.put("ns", 	   Mappath(lessPath.replaceAll("\\/[\\w\\.]*$", ""), request)); // 去掉文件名，保留路径，也就是文件夹名称
			params.put("picPath",  Util.getBasePath(request) + "/asset/images"); // 返回 CSS 背景图所用的图片
			params.put("MainDomain", "");
			
			return "http://" + getLocalIp() + "/lessService/?" + Util.HashJoin(params);
		}else{
			return request.getContextPath() + lessPath.replace(".less", ".css");
		}
	}
	
	/**
	 * 获取 CSS 地址（默认的）
	 * @return
	 */
	public String getCssUrl(){
		return getCssUrl(Constant.page_css_lessFile);
	}
	
	/**
	 * 获取静态资源库（js地址）
	 * @return
	 */
	public String getJsSrc(){
		return Application.isDebug ? String.format(Constant.JsSrc_local, getLocalIp()) : Constant.JsSrc_remote;
	}
	/**
	 * 相对地址转换为绝对地址，并转换斜杠
	 * @param relativePath
	 * @return
	 */
	private static String Mappath(String relativePath, HttpServletRequest request){
		String absoPath = Util.Mappath(request, relativePath);
		return absoPath != null ? absoPath.replace("\\", "/") : "";
	}
}
